home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / network / cisco / ciscocrack.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  181 lines

  1. /*
  2.  * Cisco password decrypter V2.0
  3.  *  (c) 1995 by SPHiXe
  4.  *
  5.  * DISCLAIMER: The author of this program takes no responsibility for
  6.  *             neither direct nor indirect damages caused by this program.
  7.  *             Misuse of this program may lead to serious problems with
  8.  *             your local authorities...
  9.  *             You should know what you're doing.
  10.  */
  11.  
  12.  
  13. #include <stdio.h>
  14. #include <ctype.h>
  15.  
  16. char xlat[] = {
  17.   0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
  18.   0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
  19.   0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44
  20. };
  21.  
  22. char pw_str1[] = "password 7 ";
  23. char pw_str2[] = "enable-password 7 ";
  24.  
  25. char *pname;
  26.  
  27. cdecrypt(enc_pw, dec_pw)
  28. char *enc_pw;
  29. char *dec_pw;
  30. {
  31.   unsigned int seed, i, val = 0;
  32.  
  33.   if(strlen(enc_pw) & 1)
  34.     return(-1);
  35.  
  36.   seed = (enc_pw[0] - '0') * 10 + enc_pw[1] - '0';
  37.  
  38.   if (seed > 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))
  39.     return(-1);
  40.  
  41.   for (i = 2 ; i <= strlen(enc_pw); i++)
  42.     {
  43.       if(i !=2 && !(i & 1))
  44.         {
  45.           dec_pw[i / 2 - 2] = val ^ xlat[seed++];
  46.           val = 0;
  47.         }
  48.  
  49.       val *= 16;
  50.  
  51.       if(isdigit(enc_pw[i] = toupper(enc_pw[i])))
  52.         {
  53.           val += enc_pw[i] - '0';
  54.           continue;
  55.         }
  56.  
  57.       if(enc_pw[i] >= 'A' && enc_pw[i] <= 'F')
  58.         {
  59.           val += enc_pw[i] - 'A' + 10;
  60.           continue;
  61.         }
  62.  
  63.       if(strlen(enc_pw) != i)
  64.         return(-1);
  65.     }
  66.  
  67.   dec_pw[++i / 2] = 0;
  68.  
  69.   return(0);
  70. }
  71.  
  72. usage()
  73. {
  74.   fprintf(stdout, "Usage: %s -p <encrypted password>\n", pname);
  75.   fprintf(stdout, "       %s <router config file> <output file>\n", pname);
  76.  
  77.   return(0);
  78. }
  79.  
  80. main(argc,argv)
  81. int argc;
  82. char **argv;
  83.  
  84. {
  85.   FILE *in = stdin, *out = stdout;
  86.   char line[257];
  87.   char passwd[65];
  88.   unsigned int i, pw_pos;
  89.  
  90.   pname = argv[0];
  91.  
  92.   if(argc > 1)
  93.     {
  94.       if(argc > 3)
  95.         {
  96.           usage();
  97.           exit(1);
  98.         }
  99.  
  100.       if(argv[1][0] == '-')
  101.         {
  102.           switch(argv[1][1])
  103.             {
  104.             case 'h':
  105.               usage();
  106.               break;
  107.  
  108.             case 'p':
  109.               if(cdecrypt(argv[2], passwd))
  110.                 {
  111.                   fprintf(stderr, "Error.\n");
  112.                   exit(1);
  113.                 }
  114.               fprintf(stdout, "password: %s\n", passwd);
  115.               break;
  116.  
  117.             default:
  118.               fprintf(stderr, "%s: unknow option.", pname);
  119.             }
  120.  
  121.           return(0);
  122.         }
  123.  
  124.       if((in = fopen(argv[1], "rt")) == NULL)
  125.         exit(1);
  126.       if(argc > 2)
  127.         if((out = fopen(argv[2], "wt")) == NULL)
  128.           exit(1);
  129.     }
  130.  
  131.   while(1)
  132.     {
  133.       for(i = 0; i < 256; i++)
  134.         {
  135.           if((line[i] = fgetc(in)) == EOF)
  136.             {
  137.               if(i)
  138.                 break;
  139.  
  140.               fclose(in);
  141.               fclose(out);
  142.               return(0);
  143.             }
  144.           if(line[i] == '\r')
  145.             i--;
  146.  
  147.           if(line[i] == '\n')
  148.             break;
  149.         }
  150.       pw_pos = 0;
  151.       line[i] = 0;
  152.  
  153.       if(!strncmp(line, pw_str1, strlen(pw_str1)))
  154.         pw_pos = strlen(pw_str1);
  155.  
  156.       if(!strncmp(line, pw_str2, strlen(pw_str2)))
  157.         pw_pos = strlen(pw_str2);
  158.  
  159.       if(!pw_pos)
  160.         {
  161.           fprintf(stdout, "%s\n", line);
  162.           continue;
  163.         }
  164.  
  165.       if(cdecrypt(&line[pw_pos], passwd))
  166.         {
  167.           fprintf(stderr, "Error.\n");
  168.           exit(1);
  169.         }
  170.       else
  171.         {
  172.           if(pw_pos == strlen(pw_str1))
  173.             fprintf(out, "%s", pw_str1);
  174.           else
  175.             fprintf(out, "%s", pw_str2);
  176.  
  177.           fprintf(out, "%s\n", passwd);
  178.         }
  179.     }
  180. }
  181. /*                    www.hack.co.za           [19 May 2000]*/